Contents
前言
2017 的課程 http://speech.ee.ntu.edu.tw/~tlkagk/courses_MLDS17.html
有些部分似乎沒拍成影片,可惜了~
Basic Structure: Recurrent Structure
簡單來說就是此 network 重複使用同樣的 function 一次又一次。
Recurrent Neural Network
$f$ 有兩個輸入和兩個輸出,皆為 vector。
且產生出來的 $h^{\prime}$ 要與 $h$ 有一樣的維度,這樣才能再做為下一個 $f$ 的輸入。
我們不需要管 $x$ 有多少,都只需要一個 $f$ 。
在處理 sequence 時使用 RNN 的好處是,我們只需要比較少的參數來處理,所以比較不容易 overfitting ,但也比較難訓練,但訓練好後在 testing data 上的成果往往比較好。
如果是用 feed forward 來處理 sequence 的話,儘管在 training data 上有不錯的結果,但很有可能因為參數太多而導致 overfitting 。
- Deep RNN:
為了要讓不同 $f$ 可以接在一起,這邊 $f_2$ 的輸入和 $f_1$ 的輸出維度要一樣。
- Bidirectional RNN:
$f_1$ 處理 feedforward , $f_2$ 處理 backward , $f_3$ 負責將它們兩接再一起。
- Pyramidal RNN
(略)
- Naive RNN
一個常見的 $f$ ,先算出 $h^\prime$ ,再用 $h^\prime$ 去求出 $y$ 。
- LSTM
LSTM
也是一種 RNN。
複雜複雜的傢伙 LSTM wiki 。
這裡與 Naive 的稍作比對,原本在 Naive 中用來銜接兩個 $f$ 的是 $h$ 這個向量。
在 LSTM 中則是有兩個 $c,h$,而這兩個向量分別有不同的特性:
- c: c 之間的關係可能是前一個 加 上了某些東西產生出下一個 => 改變較慢
- h: h 之間關係複雜,前後兩個會非常不同 => 改變較快
如此一來訊息在傳遞時有兩條路徑可走。
c 可以記得 較久 以前的資訊,h 則是 較短 期的。
計算上簡單來看:
(投影片中顏色一樣的就代表是一樣的東西)
從第一個式子來看,就是把 $x^t$ 和 $h^{t-1}$ 接在一起成一個更長的向量,跟 $w$ matrix 相乘,再代進 activation function ,得到 $z$。
(影片中好像有解釋這個的意思,可惜是在我看不到的黑板上…)
其他的就是乘上不同的 $w$ matrix 和代進 activation function ,得到不同的 $z$
接著來看 $c$ ,有時候我們會把它也接在 $x,h$ 下,這樣稱為 peephole。(我也不知道是甚麼意思…)
($w$ 也隨之變寬,通常會使 $c$ 對應到的部分是 diagonal)
下一項的 $c,h$ 可以從圖中清楚的看出是如何運算的,可以依序算出 $c^t$ => $h^t$ => $y^t$
$\odot$ : element-wise operator。
tanh : Hyperbolic tangent function
$y^t$ 的部分需要再和另一個 matrix $W^\prime$ 相乘,並代入 sigmoid function。
(圖中做矩陣乘法的用 粗箭頭 來表示)
再來是各個 $z$ 所代表的意義:
- $z^f$: forget gate ,用來決定 $c^{t-1}$ 這個記憶能不能傳到下個時間點
- $z^i$: input gate ,用來決定 $z$(淺綠色方塊) 的資訊能不能流進去
- $z^o$: output gate ,用來決定區塊記憶中的 input 是否能輸出 (這個取自 wiki)
如同前面 RNN 一樣,我們繼續連接它,function 參數一樣只是拿出來反覆使用。每一次完整的輸入輸出都是一個 block。
另外在 LSTM 中各 gate 的重要性大致上是: forget > input > output
(在不同例子可能不同)
GRU
LSTM 的一種版本,它並沒有明確的區分長短期,所以外觀看起來跟 Naive 一樣,但它內部的行為很像 LSTM 。
我們將 $h^{t-1},x^t$ 並在一起後,乘上一個矩陣並代進 activation function (粗箭頭),這邊是使用 sigmoid function ,使它的值介於 0,1 ,稱為 reset gate 。
同樣的 $h^{t-1},x^t$ ,再乘上另外一個矩陣並代進 function,得到的是 update gate。
接著把 $r$ 和 $h^{t-1}$ 做 element-wise 得到的向量和 $x^t$ 合併之後,乘上一個矩陣(黃粗箭頭),就得到 $h^\prime$ 。
其餘就看圖吧!
p.s. 中間有個 1- 的部分是指 $1-z$ 和 $h^\prime$ 做 element-wise 。
p.s. 上方數學式子修正為 $h^t = z\odot h^{t-1} +(1-z)\odot h^\prime$
而使用 GRU 的其中一個好處是它運算量較少,可以看到它跟原本 LSTM 相比起來矩陣的部分較少。(黃色的為一個)
也就代表了參數較少,比較不會 overfitting 。
(這邊影片中是說,這樣的講法是有點語帶保留,要再討論的!)
其他
利用 phoneme classification 來當例子測試各種方法,看哪種結果比較好
(注意表中左上角部分的符號)